Computerized devices control almost every aspect of our life—from writing documents to controlling traffic lights. However, computerized devices are bug-prone, and thus require a testing phase in which the bugs should be discovered. The testing phase is considered one of the most difficult tasks in designing a computerized device. The cost of not discovering a bug may be enormous, as the consequences of the bug may be disastrous. For example, a bug may cause the injury of a person relying on the designated behavior of the computerized device. Additionally, a bug in hardware or firmware may be expensive to fix, as patching it requires call-back of the computerized device. Hence, many developers of computerized devices invest a substantial portion of the development cycle to discover erroneous behaviors of the computerized device.
In functional verification, test templates are used to specify the requirements for a set of generated tests, also referred to as test-cases. The requirements can be specific, such as create a collision in a given buffer. The requirements can be generic, such as stress a given unit of the design under test (DUT). Stimuli generators take the test templates and generate many random tests that fulfill these requirements. The test-cases generated by the generators may be employed by a simulation of the DUT, such as an HDL simulator, an emulator, or the like, for testing functionality of the design.